package com.buli.blmall.admin.system.service;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.buli.blmall.admin.system.entity.SysConfig;
import com.buli.blmall.admin.system.mapper.SysConfigMapper;
import com.buli.blmall.admin.system.vo.SysConfigVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 * 配置 服务类
 * </p>
 *
 * @author buli
 * @since 2024-12-20
 */
@Slf4j
@Service
public class SysConfigService extends ServiceImpl<SysConfigMapper, SysConfig> {

    /**
     * 查询配置详情
     *
     * @param id
     * @return 配置详情
     */
    public SysConfigVO info(Long id) {
        return BeanUtil.copyProperties(getById(id), SysConfigVO.class );
    }

    /**
     * 查询配置集合
     *
     * @param sysConfigVo
     * @return 配置集合
     */
    public List<SysConfigVO> queryList(SysConfigVO sysConfigVo) {
        LambdaQueryWrapper<SysConfig> queryWrapper = new LambdaQueryWrapper<>();
        List<SysConfig> list = list(queryWrapper);
        return BeanUtil.copyToList(list, SysConfigVO.class );
    }

    /**
     * 新增配置
     * @param sysConfigVo
     * @return boolean
     */
    public boolean add(SysConfigVO sysConfigVo) {
        SysConfig sysConfig = BeanUtil.copyProperties(sysConfigVo, SysConfig.class );
        return save(sysConfig);
    }

    /**
     * 编辑配置
     * @param sysConfigVo
     * @return boolean
     */
    public boolean edit(SysConfigVO sysConfigVo) {
        SysConfig sysConfig = BeanUtil.copyProperties(sysConfigVo, SysConfig.class );
        return updateById(sysConfig);
    }

    /**
     * 删除配置
     * @param id
     * @return boolean
     */
    public boolean delete(Long id) {
        return removeById(id);
    }

    /**
     * 获取指定key的值
     * @param configKey
     * @return
     */
    public String selectConfigByKey(String configKey) {
        SysConfig retConfig = baseMapper.selectOne(new LambdaQueryWrapper<SysConfig>().eq(SysConfig::getConfigKey, configKey));
        if (ObjectUtil.isNotNull(retConfig)) {
            return retConfig.getConfigValue();
        }
        return StringUtils.EMPTY;
    }

}
